using YasharEl.Infrastructure.ApplicationModel.Bootstrap.Extensibility;

namespace YasharEl.Infrastructure.ApplicationModel.Bootstrap.Configuration
{
    /// <summary>
    /// Factory which creates the necessary dependencies for the <see cref="ConfigurationSectionBehavior"/>.
    /// </summary>
    public interface IConfigurationSectionBehaviorFactory
    {
        /// <summary>
        /// Creates the instance which knows the section name.
        /// </summary>
        /// <param name="extension">The extension.</param>
        /// <returns>The istance.</returns>
        IHaveConfigurationSectionName CreateHaveConfigurationSectionName(IBootstrappingExtension extension);

        /// <summary>
        /// Creates the instance which loads configuration sections.
        /// </summary>
        /// <param name="extension">The extension.</param>
        /// <returns>The instance.</returns>
        ILoadConfigurationSection CreateLoadConfigurationSection(IBootstrappingExtension extension);

        /// <summary>
        /// Creates the instance which consumes a configuration section.
        /// </summary>
        /// <param name="extension">The extension.</param>
        /// <returns>
        /// The instance.
        /// </returns>
        IConsumeConfigurationSection CreateConsumeConfigurationSection(IBootstrappingExtension extension);
    }
}